Intent

Die von der Ablaufsteuerung ausgehenden Befehle sollen bis zur ihrer Ausführung in Warteschlangen abgelegt werden können. Da die Ablaufsteuerung und die Steuerungen der einzelnen Maschinen in unterschiedlichen Threads laufen, ist es nötig, Befehl in Warteschlangen abzulegen, damit Wartezeiten vermieden werden können.

Motivation

Die Ablaufsteuerung und die Maschinen laufen in unterschiedlichen Threads. Die Ablaufsteuerung muß jedoch den Maschinen Befehle geben können. Damit die Befehle von einem Thread zum anderen ohne Stoppen eines Thread übertragen werden können, ist eine Kapselung der Befehle nötig. Diese Kapselung wird durch das Command-Muster vorgenommen. Durch dieses Entwurfsmuster wird an der Schnittstelle zwischen Ablaufsteuerung und Maschine ein Objekt übergeben. Damit ist es möglich, den Befehl zu speichern, so daß die Ablaufsteuerung sofort weiter arbeiten kann und andererseits die Maschine auch noch andere Befehle vor der Ausführung des neuen Befehls abarbeiten kann.

Applicability

Das Command -Muster nach [Gamma et. al., 1995] wird verwendet, weil die Anforderungen von der Ablaufsteuerung und die Bearbeitung in den Klassen Machines, Transport und Handling zu unterschiedliche Zeiten vorgenommen werden. Mit einem Command-Objekt kann die Anforderung bis zur Bearbeitung in Warteschlangen gespeichert werden.

Das Entwurfsmuster hilft auch die Befehle transaktionsorientiert abzuarbeiten. Die Abarbeitung der Befehle erfolgt vollständig, bevor ein weiterer Befehl zur Ausführung kommt. Dies ist nötig, weil mehrere Ablaufsteuerungen eine Maschine steuern können.

Structure

Participants

Bei der Implementierung des Entwurfsmusters in OSEFA wurde von der Struktur des Entwurfsmusters nach [Gamma et. al., 1995] abgewichen. Die Klasse Cmd besitzt keine Methode Execute und deshalb muß in den Klassen CNC_Transport und CNC_Maschine die Art des Befehles abgefragt werden und der entsprechende Programmteil abgearbeitet werden.

Consequences

Mit dem Entwurfsmuster wird eine Trennung zwischen Erzeuger und Bearbeiter geschaffen.

Da die Implementierung des Entwurfsmusters in OSEFA von der Struktur des Entwurfsmusters nach [Gamma et. al., 1995] abgewichen wurde, sind bei der Ausführung der Befehle Fallunterscheidungen und Typumwandelung der Befehle nötig. Hätte die Klasse Cmd eine Methode zur Ausführung des Befehls, wie im Entwurfsmuster nach [Gamma et. al., 1995], könnten die Fallunterscheidungen vermieden werden. Von der Methode ProcessCommand müßte dann diese Methode aufgerufen werden. Diese Methode könnte dann den Befehl mit Hilfe von neuen Methoden in den Klassen Maschine, Transport usw. abarbeiten. Dadurch würden die Fallunterscheidungen vermieden, außerdem würde das Hinzufügen von neuen Befehlen vereinfacht. Ein Zusammenfügen von Befehlen mit Hilfe des Composite-Muster ist auch nicht möglich.

Implementation

Related Pattern



OSEFA: © '96 Fachhochschule Konstanz, Fachbereich Informatik, Prof. Schmid
Dokumentation: © '97 Universität-GH Siegen, FB 12, Markus Blachnik & Georg Odenthal